<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body></body>
  <script>
    /*
        ...(展开运算符)
            - 可以将一个数组中的元素展开到另一个数组中或则作为函数的参数传递
            - 通过它也可以对数组进行浅复制

        对象的复制
            - Object.assign() 将一个或者多个源对象中所有可枚举的自有属性复制到目标对象，并返回修改后的目标对象。
            - 该方法接收两个参数，第一个参数是目标对象，第二个参数是源对象，它会将源对象的所有可枚举属性的值复制到目标对象中，并返回目标对象。
            - 注意：浅复制只复制对象的第一层属性，如果源对象中还有嵌套对象，则只复制第一层的属性，不会递归复制。
    */
    class Person {
      constructor(name, age) {
        this.name = name;
      }
    }
    Person.prototype.aa = 22;
    const arr1 = [1, 2, 3, { name: "zs" }];
    const arr2 = [...arr1]; // 数组浅复制
    console.log(arr2); // [1, 2, 3]
    console.log(arr2 === arr1);
    console.log(arr1[3] === arr2[3]);
    let p1 = new Person({ name: { a: [1, 2, 3] } });
    let p2 = {};
    Object.assign(p2, p1);
    console.log(p1, p2);
    console.log(p1.name, p2.name);
    console.log(p2 === p1);
    console.log(p2.name.a === p1.name.a);
    console.log(p1, p2);
    p1.name.a = [90];
    console.log(p1.name.a, p2.name.a);
    let obj1 = {name:'五孔',age:19}
    let obj2 = {...obj1}
    console.log(obj1,obj2,obj1===obj2);
  </script>
</html>
